from transformers import AutoTokenizer, BertTokenizer  # 导入 Hugging Face 的分词器类

# 加载字典和分词器
token = BertTokenizer.from_pretrained(
    r"D:\SentimentBERT\model\bert-base-chinese\models--bert-base-chinese\snapshots\c30a6ed22ab4564dc1e3b2ecbf6e766b0611a33f"
)
# 使用 `BertTokenizer` 类加载预训练的 BERT 分词器（指定本地路径）

# 定义需要分词的句子
sents = [
    "价格在这个地段属于适中, 附近有早餐店,小饭店, 比较方便,无早也无所",
    "房间不错,只是上网速度慢得无法忍受,打开一个网页要等半小时,连邮件都无法收。另前台工作人员服务态度是很好，只是效率有得改善。"
]
# 定义两个中文句子，用于批量分词编码

# 批量编码句子
out = token.batch_encode_plus(
    batch_text_or_text_pairs=[sents[0], sents[1]],  # 输入需要编码的句子列表
    add_special_tokens=True,  # 是否添加特殊符号（如 [CLS] 和 [SEP]）
    truncation=True,  # 当句子长度超过最大长度时，是否截断
    max_length=35,  # 设置最大长度为 35
    padding="max_length",  # 将所有句子填充到最大长度
    return_tensors=None,  # 返回数据的格式，默认为 Python 列表（可选 "tf", "pt", "np"）
    return_attention_mask=True,  # 是否返回 attention mask（用于忽略填充部分）
    return_token_type_ids=True,  # 是否返回 token 类型 ID（用于区分句子 A 和 B）
    return_special_tokens_mask=True,  # 是否返回特殊符号的掩码
    return_length=True  # 是否返回每个句子的实际长度
)
# 使用 `batch_encode_plus` 方法对句子进行批量编码，返回一个包含多种信息的字典

# 遍历编码结果并打印每个字段
for k, v in out.items():
    print(k, ";", v)
# 遍历编码结果的键值对，打印每个字段的内容（如 input_ids、attention_mask 等）

# 解码文本数据
print(token.decode(out["input_ids"][0]), token.decode(out["input_ids"][1]))
# 使用 `decode` 方法将编码后的 token ID 转换回原始文本，并打印解码结果

# 逻辑的实现
# 1.加载分词器
# 2.定义输入的句子
# 3.批量编码句子
# 4.遍历和打印编码结果
# 5.解码文本数据